//单链表
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct  Lnode {
      ElemType  data;    // 数据域
      struct Lnode    *next;  // 指针域
   } LNode, *LinkList; 
    
LinkList CreateList_N(int n) {
    // 逆序输入 n 个数据元素，建立带头结点的单链表
LinkList L;
int i;
LinkList p;
L = (LinkList) malloc (sizeof (LNode));
L->next=NULL;    // 先建立一个带头结点的单链表
printf("倒序输入结点值:\n");
for (i = 1; i <=n; i++) {
    p = (LinkList) malloc (sizeof (LNode));
    scanf("%d",&p->data);    // 输入元素值
    p->next = L->next; 
    L->next = p;  // 插入
}
return L;
}
void  InitList(LinkList L){
  	L = (LinkList) malloc(sizeof(LNode)) ; 
  	if(!L)  
      printf("申请失败！");
 	L->next=NULL;
}
void  OutputNode(LinkList head){
	LNode *p;
	int i=0;
	p=head->next;
	while(p!=NULL){
		printf("%4d",p->data);
		i++;
		p=p->next;
	}
	// return i;
}
//写一算法将单链表中值重复的结点删除
//使所得的结果链表中所有结点的值均不相同。
void quchong(LNode *k){
    LNode *p;
    p=k;
    while(p->next!=NULL){
        if(k->data==p->next->data){
            p->next=p->next->next;
        }else{
            p=p->next;
        }
    }
    if(k->next!=NULL)
        quchong(k->next);
}
//写一算法从一给定的向量A删除值在x到y(x≤y)之间的所有元素
//(注意：x和y是给定的参数，可以和表中的元素相同，也可以不同)。
void del(LNode *a,int x,int y){
    LNode *p,*res;
    p=a;
    res=a;
    while(p){
        if((p->data>=x)&&(p->data<=y)){
            res->next=p->next;
            p=res->next;
        }else{
            res=p;
            p=p->next;
        }
    }
} 
//查找链表中倒数第 k 个位置上的结点（k 为正整数）。
//若查找成功，算法输出该结点的 data 值，并返回 1；
//否则，只返回 0。
int find_k(LinkList head,int k){
    LinkList L1=head->next;
    LinkList L2=head->next;
    while(k>0){
        L1=L1->next;
        k--;
    }
    while(L1->next!=NULL){
        L1=L1->next;
        L2=L2->next;
    }
    if(L2!=NULL){
        printf("%d",L2->data);
        return 1;
        }

return 0;
}
int main(){
	LinkList L;
    InitList(L);
	int n;
    printf("输入链表的长度:\n");
	scanf_s("%d",&n);
	L=CreateList_N(n);
    // quchong(L);
    int x,y;
    printf("输入要删除的区间(x,y):\n");
    scanf("%d",&x);scanf("%d",&y);
    printf("x=%d,y=%d \n",x,y);
    del(L,x,y);
	OutputNode(L);
    return 0;
}
